home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / 274_01.zip / A_UNOP.H < prev    next >
Text File  |  1993-04-01  |  4KB  |  123 lines

  1. /* Array Handling Package
  2. (C) Copyright 1985,1987,1988 James P. Cruse - All Rights Reserved
  3.  
  4. a_unop.h
  5.  
  6. A Part of the User-Supported Array Handling package. Please see
  7. the file ARRAY.h for discussion concerning the registration and 
  8. usage of the package.
  9.  
  10. declares all unary operations:
  11.  
  12. Notation:
  13.     d[]    =>    all elements of d (from 0 to n-1)
  14.     d[i]    =>    the i'th element of d (from 0 to n-1)
  15.     d[i-1]    =>    the i-1'th element of d (from 1 to n-1)
  16.     s    =>    parameter s
  17.     f()    =>    function parameter f (i.e. cos)
  18.     T    =>    function type T (i.e. float)
  19.  
  20.     running "sums" are d[0] = a[0], d[1] = d[0] "+" a[1], ...
  21.         d[n-2] = d[n-3] "+" a[n-2], d[n-1] = d[n-2] "+" a[n-1]
  22.  
  23. The functions are: 
  24.     a_cpy(n,d,a)    d[] = a[];              copy a to d
  25.     a_neg(n,d,a)    d[] = - a[];        negate a to d
  26.     a_abs(n,d,a)    d[] = ARR_ABS(a[])    absolute value of a to d
  27.     a_scale(n,d,a,s,o)            scale & offset of a to d
  28.             d[] = o + s*a[]        => linear poly of a to d
  29.     a_rsum(n,d,a)    d[i] = d[i-1] + a[i]    running sum of a to d
  30.     a_rprod(n,d,a)    d[i] = d[i-1] * a[i]    running sum of a to d
  31.     a_rmin(n,d,a)    d[i] = ARR_MIN(d[i-1],d[i])
  32.                         running minimum of a to d
  33.     a_rmax(n,d,a)    d[i] = ARR_MAX(d[i-1],d[i])
  34.                         running maximum of a to d
  35.     a_fun(n,d,a,f())            call function f on a to d
  36.             d[i] = f ( a[i] )    
  37.     a_t_fun(n,d,a,f(),T)            call function f on a to d
  38.             d[i] = f ( (T)a[i] )    forcing a to type T
  39.  
  40. */    
  41.  
  42. /* check to make sure array.h has been included */
  43. #ifndef    ARR_IF_NEEDED
  44. #include "array.h"
  45. #endif
  46.  
  47.  
  48. /* check to see if we have been loaded */
  49. #ifndef    ARR_UNOP_LOADED
  50. #define    ARR_UNOP_LOADED    1
  51.  
  52. /* copy */
  53. #define    a_cpy(N,D,A)    ARR_IF1 { \
  54.     ARR_TYPE_IND ARR_IND = (N); \
  55.     while ( ARR_IND-- ) \
  56.         (D)[ARR_IND] = (A)[ARR_IND] ; \
  57.     } ARR_IF2
  58. /* negate */
  59. #define    a_neg(N,D,A)    ARR_IF1 { \
  60.     ARR_TYPE_IND ARR_IND = (N); \
  61.     while ( ARR_IND-- ) \
  62.         (D)[ARR_IND] = - (A)[ARR_IND] ;  \
  63.     } ARR_IF2
  64.  
  65. /* absolute value */
  66. #define    a_abs(N,D,A)    ARR_IF1 { \
  67.     ARR_TYPE_IND ARR_IND = (N); \
  68.     while ( ARR_IND-- ) \
  69.         (D)[ARR_IND] = ARR_ABS( (A)[ARR_IND] ) ;  \
  70.     } ARR_IF2
  71.  
  72. /* scale & offset */
  73. #define    a_scale(N,D,A,S,O)    ARR_IF1 { \
  74.     ARR_TYPE_IND ARR_IND = (N); \
  75.     while ( ARR_IND-- ) \
  76.         (D)[ARR_IND] = (O) + (S)*((A)[ARR_IND]) ; \
  77.     } ARR_IF2
  78.  
  79. /* running sum */
  80. #define    a_rsum(N,D,A)    ARR_IF1 { \
  81.     ARR_TYPE_IND ARR_IND; (D)[0] = (A)[0]; \
  82.     for ( ARR_IND = 1; ARR_IND < (N); ++ARR_IND ) \
  83.         (D)[ARR_IND] = (D)[ARR_IND - 1] + (A)[ARR_IND] ;  \
  84.     } ARR_IF2
  85.  
  86. /* running product */
  87. #define    a_rprod(N,D,A)    ARR_IF1 { \
  88.     ARR_TYPE_IND ARR_IND; (D)[0] = (A)[0]; \
  89.     for ( ARR_IND = 1; ARR_IND < (N); ++ARR_IND ) \
  90.         (D)[ARR_IND] = (D)[ARR_IND - 1] * (A)[ARR_IND] ;  \
  91.     } ARR_IF2
  92.  
  93. /* running min */
  94. #define    a_rmin(N,D,A)    ARR_IF1 { \
  95.     ARR_TYPE_IND ARR_IND; (D)[0] = (A)[0]; \
  96.     for ( ARR_IND = 1; ARR_IND < (N); ++ARR_IND ) \
  97.         (D)[ARR_IND] = ARR_MIN( (D)[ARR_IND - 1] , (A)[ARR_IND] );  \
  98.     } ARR_IF2
  99.  
  100. /* running max */
  101. #define    a_rmax(N,D,A)    ARR_IF1 { \
  102.     ARR_TYPE_IND ARR_IND; (D)[0] = (A)[0]; \
  103.     for ( ARR_IND = 1; ARR_IND < (N); ++ARR_IND ) \
  104.         (D)[ARR_IND] = ARR_MAX( (D)[ARR_IND - 1] , (A)[ARR_IND] );  \
  105.     } ARR_IF2
  106.  
  107. /* unary function */
  108. #define    a_fun(N,D,A,F)    ARR_IF1 { \
  109.     ARR_TYPE_IND ARR_IND = (N); \
  110.     while ( ARR_IND-- ) \
  111.         (D)[ARR_IND] = F( (A)[ARR_IND] );  \
  112.     } ARR_IF2
  113.  
  114. /* typed unary function */
  115. #define    a_t_fun(N,D,A,F,T)    ARR_IF1 { \
  116.     ARR_TYPE_IND ARR_IND = (N); \
  117.     while ( ARR_IND-- ) \
  118.         (D)[ARR_IND] = F( ((T) ((A)[ARR_IND]) ) ); \
  119.     } ARR_IF2
  120.  
  121.  
  122. #endif
  123.